ZQuest Classic Coverage Report


Directory: src/
File: src/gui/builder.h
Date: 2025-11-13 04:25:43
Exec Total Coverage
Lines: 0 315 0.0%
Functions: 0 14990 0.0%
Branches: 0 5530 0.0%

Line Branch Exec Source
1 #ifndef ZC_GUI_BUILDER_HPP
2 #define ZC_GUI_BUILDER_HPP
3
4 #include "gui/use_size.h"
5 #include "gui/button.h"
6 #include "gui/checkbox.h"
7 #include "gui/checkbox_qr.h"
8 #include "gui/colorsel.h"
9 #include "gui/common.h"
10 #include "gui/ditherprev.h"
11 #include "gui/drop_down_list.h"
12 #include "gui/frame.h"
13 #include "gui/grid.h"
14 #include "gui/key.h"
15 #include "gui/label.h"
16 #include "gui/qrpanel.h"
17 #include "gui/ddpanel.h"
18 #include "gui/radio.h"
19 #include "gui/radioset.h"
20 #include "gui/size.h"
21 #include "gui/slider.h"
22 #include "gui/switcher.h"
23 #include "gui/tabpanel.h"
24 #include "gui/tabref.h"
25 #include "gui/list.h"
26 #include "gui/scrolling_pane.h"
27 #include "gui/text_field.h"
28 #include "gui/window.h"
29 #include "gui/widget.h"
30
31 #ifdef IS_EDITOR
32 #include "zq/gui/seltile_swatch.h"
33 #include "zq/gui/selcombo_swatch.h"
34 #include "zq/gui/selherotile_swatch.h"
35 #include "zq/gui/tileanim_frame.h"
36 #include "zq/gui/msgstr_preview.h"
37 #include "zq/gui/palette_frame.h"
38 #include "zq/gui/cornerselect.h"
39 #include "zq/gui/misc_cset_sel.h"
40 #include "zq/gui/misc_color_sel.h"
41 #include "zq/gui/misc_color_row.h"
42 #include "zq/gui/dmap_minimap.h"
43 #include "zq/gui/dmap_mapgrid.h"
44 #include "zq/gui/dmap_frame.h"
45 #include "zq/gui/regiongrid.h"
46 #include "zq/gui/engraving.h"
47 #endif
48
49 #include <initializer_list>
50 #include <memory>
51 #include <string>
52 #include <string_view>
53
54 // These have to be included in order after the ones above.
55 #include "gui/macros.h"
56 #include "gui/props.h"
57
58 extern int32_t zq_screen_w, zq_screen_h;
59
60 /*
61 * A brief explanation of how this works:
62 *
63 * Each property name is a global variable of a unique type. That type has
64 * an inner class template instantiated by its operator=. For instance,
65 * the property checked is an instance of checkedProp, and checked=true
66 * returns an instance of checkedProp::Value<bool>.
67 *
68 * The builder classes have a generic applyProp function that rejects any
69 * argument as invalid. ZCGUI_ACCEPT_PROP adds a specialization for that
70 * property that calls the corresponding function on the widget. Similarly,
71 * the builders have an addChildren function that rejects all children.
72 * ZCGUI_ACCEPT_ONE_CHILD and ZCGUI_ACCEPT_MULTIPLE_CHILDREN add overloads
73 * that call the appropriate functions.
74 *
75 * A builder function calls the corresponding makeX function and creates
76 * a builder class, then passes everything to the applyArgs functions.
77 * If the first argument is a property, it calls the builder's applyProp
78 * function and calls applyArgs with the remaining arguments. If it's a widget
79 * pointer, it passes all the remaining arguments to addChildren.
80 */
81
82 namespace GUI::Internal
83 {
84
85 struct DummyType {};
86 static constexpr DummyType dummy={};
87
88 // Regular widgets
89
90 inline std::shared_ptr<Button> makeButton()
91 {
92 return std::make_shared<Button>();
93 }
94
95 inline std::shared_ptr<Checkbox> makeCheckbox()
96 {
97 return std::make_shared<Checkbox>();
98 }
99
100 inline std::shared_ptr<QRCheckbox> makeQRCheckbox()
101 {
102 return std::make_shared<QRCheckbox>();
103 }
104
105 inline std::shared_ptr<DropDownList> makeDropDownList()
106 {
107 return std::make_shared<DropDownList>();
108 }
109
110 inline std::shared_ptr<Label> makeLabel()
111 {
112 return std::make_shared<Label>();
113 }
114
115 inline std::shared_ptr<List> makeList()
116 {
117 return std::make_shared<List>();
118 }
119
120 inline std::shared_ptr<TextField> makeTextField()
121 {
122 return std::make_shared<TextField>();
123 }
124
125 inline std::shared_ptr<ColorSel> makeColorSel()
126 {
127 return std::make_shared<ColorSel>();
128 }
129
130 inline std::shared_ptr<Slider> makeSlider()
131 {
132 return std::make_shared<Slider>();
133 }
134
135 inline std::shared_ptr<DitherPreview> makeDitherPreview()
136 {
137 return std::make_shared<DitherPreview>();
138 }
139
140 // Containers
141
142 inline std::shared_ptr<Frame> makeFrame()
143 {
144 return std::make_shared<Frame>();
145 }
146
147 // This is counterintuitive: Multiple rows=rows, one row=columns.
148 inline std::shared_ptr<Grid> makeColumn()
149 {
150 return Grid::rows(1);
151 }
152
153 inline std::shared_ptr<Grid> makeColumns(size_t size)
154 {
155 return Grid::columns(size);
156 }
157
158 inline std::shared_ptr<Grid> makeRow()
159 {
160 return Grid::columns(1);
161 }
162
163 inline std::shared_ptr<Grid> makeRows(size_t size)
164 {
165 return Grid::rows(size);
166 }
167
168 inline std::shared_ptr<Grid> makeRowsColumns(size_t size, size_t size2)
169 {
170 return Grid::rows_columns(size, size2);
171 }
172
173 inline std::shared_ptr<Grid> makeColumnsRows(size_t size, size_t size2)
174 {
175 return Grid::columns_rows(size, size2);
176 }
177
178 inline std::shared_ptr<ScrollingPane> makeScrollingPane()
179 {
180 return std::make_shared<ScrollingPane>();
181 }
182
183 inline std::shared_ptr<Switcher> makeSwitcher()
184 {
185 return std::make_shared<Switcher>();
186 }
187
188 inline std::shared_ptr<Menu> makeMenu()
189 {
190 return std::make_shared<Menu>();
191 }
192
193 inline std::shared_ptr<TabPanel> makeTabPanel()
194 {
195 return std::make_shared<TabPanel>();
196 }
197
198 inline std::shared_ptr<QRPanel> makeQRPanel()
199 {
200 return std::make_shared<QRPanel>();
201 }
202
203 inline std::shared_ptr<DDPanel> makeDDPanel()
204 {
205 return std::make_shared<DDPanel>();
206 }
207
208 inline std::shared_ptr<TabRef> makeTabRef()
209 {
210 return std::make_shared<TabRef>();
211 }
212
213 inline std::shared_ptr<Radio> makeRadio()
214 {
215 return std::make_shared<Radio>();
216 }
217
218 inline std::shared_ptr<RadioSet> makeRadioSet()
219 {
220 return std::make_shared<RadioSet>();
221 }
222
223 inline std::shared_ptr<DummyWidget> makeDummyWidget()
224 {
225 return std::make_shared<DummyWidget>();
226 }
227
228 #ifdef IS_EDITOR
229 inline std::shared_ptr<SelTileSwatch> makeSelTileSwatch()
230 {
231 return std::make_shared<SelTileSwatch>();
232 }
233
234 inline std::shared_ptr<SelComboSwatch> makeSelComboSwatch()
235 {
236 return std::make_shared<SelComboSwatch>();
237 }
238
239 inline std::shared_ptr<CornerSwatch> makeCornerSwatch()
240 {
241 return std::make_shared<CornerSwatch>();
242 }
243
244 inline std::shared_ptr<SelHeroTileSwatch> makeSelHeroTileSwatch()
245 {
246 return std::make_shared<SelHeroTileSwatch>();
247 }
248
249 inline std::shared_ptr<TileFrame> makeTileFrame()
250 {
251 return std::make_shared<TileFrame>();
252 }
253
254 inline std::shared_ptr<PaletteFrame> makePaletteFrame()
255 {
256 return std::make_shared<PaletteFrame>();
257 }
258
259 inline std::shared_ptr<MsgPreview> makeMsgPreview()
260 {
261 return std::make_shared<MsgPreview>();
262 }
263
264 inline std::shared_ptr<MiscCSetSel> makeMiscCSetSel()
265 {
266 return std::make_shared<MiscCSetSel>();
267 }
268
269 inline std::shared_ptr<MiscColorSel> makeMiscColorSel()
270 {
271 return std::make_shared<MiscColorSel>();
272 }
273
274 inline std::shared_ptr<MiscColorRow> makeMiscColorRow()
275 {
276 return std::make_shared<MiscColorRow>();
277 }
278
279 inline std::shared_ptr<DMapMinimap> makeDMapMinimap()
280 {
281 return std::make_shared<DMapMinimap>();
282 }
283
284 inline std::shared_ptr<DMapMapGrid> makeDMapMapGrid()
285 {
286 return std::make_shared<DMapMapGrid>();
287 }
288
289 inline std::shared_ptr<DMapFrame> makeDMapFrame()
290 {
291 return std::make_shared<DMapFrame>();
292 }
293
294 inline std::shared_ptr<Engraving> makeEngraving()
295 {
296 return std::make_shared<Engraving>();
297 }
298
299 inline std::shared_ptr<RegionGrid> makeRegionGrid()
300 {
301 return std::make_shared<RegionGrid>();
302 }
303 #endif
304
305 // Top-level widgets
306
307 inline std::shared_ptr<Window> makeWindow()
308 {
309 return std::make_shared<Window>();
310 }
311
312 } // namespace GUI::Internal
313
314 namespace GUI::Builder
315 {
316
317 ZCGUI_BUILDER_START(Button)
318 ZCGUI_ACCEPT_PROP(onClick, onClick, Dialog::message)
319 ZCGUI_ACCEPT_PROP(text, setText, std::string)
320 ZCGUI_ACCEPT_PROP(onPressFunc, setOnPress, std::function<void()>)
321 ZCGUI_ACCEPT_PROP(type, setType, Button::type)
322 ZCGUI_ACCEPT_PROP(kb_ptr, setBoundKB, int*)
323 ZCGUI_ACCEPT_PROP(hotkey_ptr, setBoundHotkey, Hotkey*)
324 ZCGUI_ACCEPT_PROP(hotkey_indx, setHotkeyIndx, size_t)
325 ZCGUI_ACCEPT_PROP(icon, setIcon, int)
326
327 ZCGUI_SUGGEST_PROP(title, text)
328 ZCGUI_SUGGEST_PROP(onEnter, onClick)
329 ZCGUI_BUILDER_END()
330 ZCGUI_BUILDER_FUNCTION(Button, Button, makeButton)
331
332
333 ZCGUI_BUILDER_START(Checkbox)
334 ZCGUI_ACCEPT_PROP(checked, setChecked, bool)
335 ZCGUI_ACCEPT_PROP(text, setText, std::string)
336 ZCGUI_ACCEPT_PROP(boxPlacement, setBoxPlacement, Checkbox::boxPlacement)
337 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
338 ZCGUI_ACCEPT_PROP(onToggleFunc, setOnToggleFunc, std::function<void(bool)>)
339
340 ZCGUI_SUGGEST_PROP(title, text)
341 ZCGUI_BUILDER_END()
342 ZCGUI_BUILDER_FUNCTION(Checkbox, Checkbox, makeCheckbox)
343
344 ZCGUI_BUILDER_START(Radio)
345 ZCGUI_ACCEPT_PROP(checked, setChecked, bool)
346 ZCGUI_ACCEPT_PROP(text, setText, std::string)
347 ZCGUI_ACCEPT_PROP(set, setProcSet, int32_t)
348 ZCGUI_ACCEPT_PROP(indx, setIndex, size_t)
349 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
350
351 ZCGUI_SUGGEST_PROP(title, text)
352 ZCGUI_BUILDER_END()
353 ZCGUI_BUILDER_FUNCTION(Radio, Radio, makeRadio)
354
355
356 ZCGUI_BUILDER_START(RadioSet)
357 ZCGUI_ACCEPT_PROP(checked, setChecked, int32_t)
358 ZCGUI_ACCEPT_PROP(set, setProcSet, int32_t)
359 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
360
361 ZCGUI_ACCEPT_PROP(data, loadList, const ::GUI::ListData&)
362 ZCGUI_BUILDER_END()
363 ZCGUI_BUILDER_FUNCTION(RadioSet, RadioSet, makeRadioSet)
364
365
366 ZCGUI_BUILDER_START(DropDownList)
367 ZCGUI_ACCEPT_PROP(data, setListData, const ::GUI::ListData&)
368 ZCGUI_ACCEPT_PROP(selectedValue, setSelectedValue, int32_t)
369 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
370 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t)>)
371
372 ZCGUI_SUGGEST_PROP(onClick, onSelectionChanged)
373 ZCGUI_BUILDER_END()
374 ZCGUI_BUILDER_FUNCTION(DropDownList, DropDownList, makeDropDownList)
375
376
377 ZCGUI_BUILDER_START(Frame)
378 ZCGUI_ACCEPT_PROP(title, setTitle, std::string)
379 ZCGUI_ACCEPT_PROP(info, setInfo, std::string)
380 ZCGUI_ACCEPT_PROP(style, setStyle, GUI::Frame::style)
381 ZCGUI_ACCEPT_PROP(onInfo, onInfo, Dialog::message)
382 ZCGUI_ACCEPT_ONE_CHILD(setContent)
383
384 ZCGUI_SUGGEST_PROP(text, title)
385 ZCGUI_BUILDER_END()
386 ZCGUI_BUILDER_FUNCTION(Frame, Frame, makeFrame)
387
388
389 ZCGUI_BUILDER_START(Label)
390 ZCGUI_ACCEPT_PROP(text, setText, std::string)
391 ZCGUI_ACCEPT_PROP(maxLines, setMaxLines, std::size_t)
392 ZCGUI_ACCEPT_PROP(textAlign, setAlign, int32_t)
393 ZCGUI_ACCEPT_PROP(noHLine, setNoHLine, bool)
394
395 ZCGUI_SUGGEST_PROP(title, text)
396 ZCGUI_BUILDER_END()
397 ZCGUI_BUILDER_FUNCTION(Label, Label, makeLabel)
398
399
400 ZCGUI_BUILDER_START(List)
401 ZCGUI_ACCEPT_PROP(data, setListData, GUI::ListData)
402 ZCGUI_ACCEPT_PROP(selectedValue, setSelectedValue, int32_t)
403 ZCGUI_ACCEPT_PROP(selectedIndex, setSelectedIndex, int32_t)
404 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
405 ZCGUI_ACCEPT_PROP(onRClick, onRClick, Dialog::message)
406 ZCGUI_ACCEPT_PROP(onDClick, onDClick, Dialog::message)
407 ZCGUI_ACCEPT_PROP(onRClickFunc, setOnRClickFunc, std::function<void(int32_t,int32_t,int32_t)>)
408 ZCGUI_ACCEPT_PROP(onDClickFunc, setOnDClickFunc, std::function<void(int32_t,int32_t,int32_t)>)
409 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t)>)
410 ZCGUI_ACCEPT_PROP(isABC, setIsABC, bool)
411
412 ZCGUI_SUGGEST_PROP(onClick, onSelectionChanged)
413 ZCGUI_BUILDER_END()
414 ZCGUI_BUILDER_FUNCTION(List, List, makeList)
415
416
417 ZCGUI_BUILDER_START(Grid)
418 ZCGUI_ACCEPT_PROP(columnSpacing, setColumnSpacing, ::GUI::Size)
419 ZCGUI_ACCEPT_PROP(rowSpacing, setRowSpacing, ::GUI::Size)
420 ZCGUI_ACCEPT_PROP(spacing, setSpacing, ::GUI::Size)
421
422 ZCGUI_ACCEPT_MULTIPLE_CHILDREN(add)
423 ZCGUI_BUILDER_END()
424 ZCGUI_BUILDER_FUNCTION(Grid, Row, makeRow)
425 ZCGUI_BUILDER_FUNCTION_TEMPLATE(Grid, Rows, makeRows, std::size_t)
426 ZCGUI_BUILDER_FUNCTION(Grid, Column, makeColumn)
427 ZCGUI_BUILDER_FUNCTION_TEMPLATE(Grid, Columns, makeColumns, std::size_t)
428 ZCGUI_BUILDER_FUNCTION_TEMPLATE2(Grid, Rows_Columns, makeRowsColumns, std::size_t, std::size_t)
429 ZCGUI_BUILDER_FUNCTION_TEMPLATE2(Grid, Columns_Rows, makeColumnsRows, std::size_t, std::size_t)
430
431
432 ZCGUI_BUILDER_START(ScrollingPane)
433 ZCGUI_ACCEPT_PROP(ptr, setPtr, int32_t*)
434 ZCGUI_ACCEPT_PROP(targHeight, setTargHeight, ::GUI::Size)
435 ZCGUI_ACCEPT_ONE_CHILD(setContent)
436 ZCGUI_BUILDER_END()
437 ZCGUI_BUILDER_FUNCTION(ScrollingPane, ScrollingPane, makeScrollingPane)
438
439
440 ZCGUI_BUILDER_START(Switcher)
441 ZCGUI_ACCEPT_MULTIPLE_CHILDREN(add)
442 ZCGUI_BUILDER_END()
443 ZCGUI_BUILDER_FUNCTION(Switcher, Switcher, makeSwitcher)
444
445 ZCGUI_BUILDER_START(Menu)
446 ZCGUI_ACCEPT_PROP(menu, setMenu, GuiMenu*)
447 ZCGUI_BUILDER_END()
448 ZCGUI_BUILDER_FUNCTION(Menu, Menu, makeMenu)
449
450 ZCGUI_BUILDER_START(TabPanel)
451 ZCGUI_ACCEPT_PROP(indx, switchTo, size_t)
452 ZCGUI_ACCEPT_PROP(ptr, setPtr, size_t*)
453 ZCGUI_ACCEPT_PROP(onSwitch, setOnSwitch, std::function<void(size_t,size_t)>)
454 ZCGUI_ACCEPT_MULTIPLE_CHILDREN(add)
455 ZCGUI_BUILDER_END()
456 ZCGUI_BUILDER_FUNCTION(TabPanel, TabPanel, makeTabPanel)
457
458 ZCGUI_BUILDER_START(QRPanel)
459 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
460 ZCGUI_ACCEPT_PROP(onCloseInfo, onCloseInfo, Dialog::message)
461 ZCGUI_ACCEPT_PROP(qr_ptr, loadQRs, byte*)
462 ZCGUI_ACCEPT_PROP(ptr, setPtr, size_t*)
463 ZCGUI_ACCEPT_PROP(count, setCount, size_t)
464 ZCGUI_ACCEPT_PROP(showtags, setShowTags, bool)
465 ZCGUI_ACCEPT_PROP(indexed, setIndexed, bool)
466 ZCGUI_ACCEPT_PROP(scrollWidth, setScrollWidth, ::GUI::Size)
467 ZCGUI_ACCEPT_PROP(scrollHeight, setScrollHeight, ::GUI::Size)
468 ZCGUI_ACCEPT_PROP(data, loadList, const ::GUI::ListData&)
469 ZCGUI_BUILDER_END()
470 ZCGUI_BUILDER_FUNCTION(QRPanel, QRPanel, makeQRPanel)
471
472 ZCGUI_BUILDER_START(DDPanel)
473 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
474 ZCGUI_ACCEPT_PROP(values, linkVals, int32_t*)
475 ZCGUI_ACCEPT_PROP(count, setCount, size_t)
476 ZCGUI_ACCEPT_PROP(ddlist, loadDDList, const ::GUI::ListData&)
477 ZCGUI_ACCEPT_PROP(data, loadList, const ::GUI::ListData&)
478 ZCGUI_BUILDER_END()
479 ZCGUI_BUILDER_FUNCTION(DDPanel, DDPanel, makeDDPanel)
480
481 ZCGUI_BUILDER_START(TabRef)
482 ZCGUI_ACCEPT_PROP(name, setName, std::string)
483 ZCGUI_ACCEPT_ONE_CHILD(setContent)
484 ZCGUI_BUILDER_END()
485 ZCGUI_BUILDER_FUNCTION(TabRef, TabRef, makeTabRef)
486
487 ZCGUI_BUILDER_START(TextField)
488 ZCGUI_ACCEPT_PROP(maxLength, setMaxLength, std::size_t);
489 ZCGUI_ACCEPT_PROP(onEnter, onEnter, Dialog::message)
490 ZCGUI_ACCEPT_PROP(onValueChanged, onValueChanged, Dialog::message)
491 ZCGUI_ACCEPT_PROP(text, setText, std::string_view)
492 ZCGUI_ACCEPT_PROP(val, setVal, int32_t)
493 ZCGUI_ACCEPT_PROP(type, setType, TextField::type)
494 ZCGUI_ACCEPT_PROP(low, setLowBound, int32_t)
495 ZCGUI_ACCEPT_PROP(high, setHighBound, int32_t)
496 ZCGUI_ACCEPT_PROP(onValChangedFunc, setOnValChanged, std::function<void(TextField::type,std::string_view,int32_t)>)
497 ZCGUI_ACCEPT_PROP(onCursorChangedFunc, setOnCursorChanged, std::function<void(TextField::type,int32_t,int32_t)>)
498 ZCGUI_ACCEPT_PROP(places, setFixedPlaces, size_t)
499 ZCGUI_ACCEPT_PROP(swap_type, setSwapType, int32_t)
500 ZCGUI_BUILDER_END()
501 ZCGUI_BUILDER_FUNCTION(TextField, TextField, makeTextField)
502
503 ZCGUI_BUILDER_START(ColorSel)
504 ZCGUI_ACCEPT_PROP(onValueChanged, onValueChanged, Dialog::message)
505 ZCGUI_ACCEPT_PROP(val, setVal, byte)
506 ZCGUI_ACCEPT_PROP(onValChangedFunc, setOnValChanged, std::function<void(byte)>)
507 ZCGUI_BUILDER_END()
508 ZCGUI_BUILDER_FUNCTION(ColorSel, ColorSel, makeColorSel)
509
510 ZCGUI_BUILDER_START(Slider)
511 ZCGUI_ACCEPT_PROP(onValueChanged, onValueChanged, Dialog::message)
512 ZCGUI_ACCEPT_PROP(offset, setOffset, int32_t)
513 ZCGUI_ACCEPT_PROP(minOffset, setMinOffset, int32_t)
514 ZCGUI_ACCEPT_PROP(maxOffset, setMaxOffset, int32_t)
515 ZCGUI_ACCEPT_PROP(onValChangedFunc, setOnValChanged, std::function<void(int32_t)>)
516 ZCGUI_BUILDER_END()
517 ZCGUI_BUILDER_FUNCTION(Slider, Slider, makeSlider)
518
519 ZCGUI_BUILDER_START(DitherPreview)
520 ZCGUI_ACCEPT_PROP(dither_type, setDitherType, byte)
521 ZCGUI_ACCEPT_PROP(dither_arg, setDitherArg, byte)
522 ZCGUI_ACCEPT_PROP(dither_color, setDitherColor, byte)
523 ZCGUI_ACCEPT_PROP(preview_scale, setPreviewScale, byte)
524 ZCGUI_BUILDER_END()
525 ZCGUI_BUILDER_FUNCTION(DitherPreview, DitherPreview, makeDitherPreview)
526
527 ZCGUI_BUILDER_START(Window)
528 ZCGUI_ACCEPT_PROP(title, setTitle, std::string)
529 ZCGUI_ACCEPT_PROP(info, setHelp, std::string)
530 ZCGUI_ACCEPT_PROP(menu, setMenu, std::shared_ptr<Menu>)
531 ZCGUI_ACCEPT_PROP(onClose, onClose, Dialog::message)
532 ZCGUI_ACCEPT_PROP(onEnter, onEnter, Dialog::message)
533 ZCGUI_ACCEPT_PROP(use_vsync, setVSync, bool)
534 ZCGUI_ACCEPT_PROP(shortcuts, addShortcuts,
535 std::initializer_list<KeyboardShortcut>)
536 ZCGUI_ACCEPT_PROP(onTick, setOnTick, std::function<int32_t()>)
537 ZCGUI_ACCEPT_PROP(onLoad, setOnLoad, std::function<void()>)
538 ZCGUI_ACCEPT_ONE_CHILD(setContent)
539
540 ZCGUI_SUGGEST_PROP(text, title)
541 ZCGUI_BUILDER_END()
542 ZCGUI_BUILDER_FUNCTION(Window, Window, makeWindow)
543
544 ZCGUI_BUILDER_START(DummyWidget)
545 ZCGUI_BUILDER_END()
546 ZCGUI_BUILDER_FUNCTION(DummyWidget, DummyWidget, makeDummyWidget)
547
548 #ifdef IS_EDITOR
549 ZCGUI_BUILDER_START(SelTileSwatch)
550 ZCGUI_ACCEPT_PROP(tile, setTile, int32_t)
551 ZCGUI_ACCEPT_PROP(cset, setCSet, int32_t)
552 ZCGUI_ACCEPT_PROP(flip, setFlip, int32_t)
553 ZCGUI_ACCEPT_PROP(showFlip, setShowFlip, bool)
554 ZCGUI_ACCEPT_PROP(showvals, setShowVals, bool)
555 ZCGUI_ACCEPT_PROP(mini, setIsMini, bool)
556 ZCGUI_ACCEPT_PROP(showT0, setShowT0, bool)
557 ZCGUI_ACCEPT_PROP(minicorner, setMiniCrn, int32_t)
558 ZCGUI_ACCEPT_PROP(tilewid, setTileWid, int32_t)
559 ZCGUI_ACCEPT_PROP(tilehei, setTileHei, int32_t)
560 ZCGUI_ACCEPT_PROP(deftile, setDefTile, int32_t)
561 ZCGUI_ACCEPT_PROP(defcs, setDefCS, int32_t)
562 ZCGUI_ACCEPT_PROP(minionly, setMiniOnly, bool)
563 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
564 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t,int32_t,int32_t)>)
565 ZCGUI_BUILDER_END()
566 ZCGUI_BUILDER_FUNCTION(SelTileSwatch, SelTileSwatch, makeSelTileSwatch)
567
568 ZCGUI_BUILDER_START(SelComboSwatch)
569 ZCGUI_ACCEPT_PROP(combo, setCombo, int32_t)
570 ZCGUI_ACCEPT_PROP(cset, setCSet, int32_t)
571 ZCGUI_ACCEPT_PROP(showvals, setShowVals, bool)
572 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
573 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t,int32_t)>)
574 ZCGUI_BUILDER_END()
575 ZCGUI_BUILDER_FUNCTION(SelComboSwatch, SelComboSwatch, makeSelComboSwatch)
576
577 ZCGUI_BUILDER_START(CornerSwatch)
578 ZCGUI_ACCEPT_PROP(val, setVal, int32_t)
579 ZCGUI_ACCEPT_PROP(color, setColor, int32_t)
580 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
581 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t)>)
582 ZCGUI_BUILDER_END()
583 ZCGUI_BUILDER_FUNCTION(CornerSwatch, CornerSwatch, makeCornerSwatch)
584
585 ZCGUI_BUILDER_START(SelHeroTileSwatch)
586 ZCGUI_ACCEPT_PROP(heroSprite, setHeroSprite, int32_t)
587 ZCGUI_ACCEPT_PROP(dir, setDir, int32_t)
588 ZCGUI_ACCEPT_PROP(frames, setFrames, int32_t)
589 ZCGUI_BUILDER_END()
590 ZCGUI_BUILDER_FUNCTION(SelHeroTileSwatch, SelHeroTileSwatch, makeSelHeroTileSwatch)
591
592 ZCGUI_BUILDER_START(TileFrame)
593 ZCGUI_ACCEPT_PROP(tile, setTile, int32_t)
594 ZCGUI_ACCEPT_PROP(cset, setCSet, int32_t)
595 ZCGUI_ACCEPT_PROP(cset2, setCSet2, int32_t)
596 ZCGUI_ACCEPT_PROP(speed, setSpeed, int32_t)
597 ZCGUI_ACCEPT_PROP(frames, setFrames, int32_t)
598 ZCGUI_ACCEPT_PROP(delay, setDelay, int32_t)
599 ZCGUI_ACCEPT_PROP(skipx, setSkipX, int32_t)
600 ZCGUI_ACCEPT_PROP(skipy, setSkipY, int32_t)
601 ZCGUI_ACCEPT_PROP(do_sized, setDoSized, bool)
602 ZCGUI_ACCEPT_PROP(flip, setFlip, int32_t)
603 ZCGUI_ACCEPT_PROP(flashcs, setFlashCS, int32_t)
604 ZCGUI_BUILDER_END()
605 ZCGUI_BUILDER_FUNCTION(TileFrame, TileFrame, makeTileFrame)
606
607 ZCGUI_BUILDER_START(PaletteFrame)
608 ZCGUI_ACCEPT_PROP(bitmap, setBitmap, BITMAP*)
609 ZCGUI_ACCEPT_PROP(cdata, setColorData, byte*)
610 ZCGUI_ACCEPT_PROP(palette, setPal, PALETTE*)
611 ZCGUI_ACCEPT_PROP(count, setCount, uint8_t)
612 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void()>)
613 ZCGUI_BUILDER_END()
614 ZCGUI_BUILDER_FUNCTION(PaletteFrame, PaletteFrame, makePaletteFrame)
615
616 ZCGUI_BUILDER_START(MsgPreview)
617 ZCGUI_ACCEPT_PROP(data, setData, MsgStr const*)
618 ZCGUI_ACCEPT_PROP(indx, setIndex, int32_t)
619 ZCGUI_ACCEPT_PROP(text, setText, std::string)
620 ZCGUI_BUILDER_END()
621 ZCGUI_BUILDER_FUNCTION(MsgPreview, MsgPreview, makeMsgPreview)
622
623 ZCGUI_BUILDER_START(MiscCSetSel)
624 ZCGUI_ACCEPT_PROP(c1, setC1, int32_t)
625 ZCGUI_ACCEPT_PROP(c2, setC2, int32_t)
626 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(int32_t,int32_t)>)
627 ZCGUI_BUILDER_END()
628 ZCGUI_BUILDER_FUNCTION(MiscCSetSel, MiscCSetSel, makeMiscCSetSel)
629
630 ZCGUI_BUILDER_START(MiscColorSel)
631 ZCGUI_ACCEPT_PROP(c1, setC1, int32_t)
632 ZCGUI_ACCEPT_PROP(c2, setC2, int32_t)
633 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(int32_t,int32_t)>)
634 ZCGUI_BUILDER_END()
635 ZCGUI_BUILDER_FUNCTION(MiscColorSel, MiscColorSel, makeMiscColorSel)
636
637 ZCGUI_BUILDER_START(MiscColorRow)
638 ZCGUI_ACCEPT_PROP(system, setSys, bool)
639 ZCGUI_ACCEPT_PROP(val, setVal, int32_t)
640 ZCGUI_ACCEPT_PROP(cset, setCS, int32_t)
641 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(int32_t)>)
642 ZCGUI_BUILDER_END()
643 ZCGUI_BUILDER_FUNCTION(MiscColorRow, MiscColorRow, makeMiscColorRow)
644
645 ZCGUI_BUILDER_START(DMapMinimap)
646 ZCGUI_ACCEPT_PROP(curMap, setCurMap, int32_t)
647 ZCGUI_ACCEPT_PROP(smallDMap, setSmallDMap, bool)
648 ZCGUI_ACCEPT_PROP(offset, setOffset, int32_t)
649 ZCGUI_BUILDER_END()
650 ZCGUI_BUILDER_FUNCTION(DMapMinimap, DMapMinimap, makeDMapMinimap)
651
652 ZCGUI_BUILDER_START(DMapMapGrid)
653 ZCGUI_ACCEPT_PROP(mapGridPtr, setMapGridPtr, byte*)
654 ZCGUI_ACCEPT_PROP(continueScreen, setContinueScreen, int32_t)
655 ZCGUI_ACCEPT_PROP(compassScreen, setCompassScreen, bool)
656 ZCGUI_ACCEPT_PROP(smallDMap, setSmallDMap, bool)
657 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(byte*, byte, byte)>)
658 ZCGUI_BUILDER_END()
659 ZCGUI_BUILDER_FUNCTION(DMapMapGrid, DMapMapGrid, makeDMapMapGrid)
660
661 ZCGUI_BUILDER_START(DMapFrame)
662 ZCGUI_ACCEPT_PROP(Dmap, setDMap, int32_t)
663 ZCGUI_BUILDER_END()
664 ZCGUI_BUILDER_FUNCTION(DMapFrame, DMapFrame, makeDMapFrame)
665
666 ZCGUI_BUILDER_START(RegionGrid)
667 ZCGUI_ACCEPT_PROP(localRegionsData, setLocalRegionsData, regions_data*)
668 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void()>)
669 ZCGUI_BUILDER_END()
670 ZCGUI_BUILDER_FUNCTION(RegionGrid, RegionGrid, makeRegionGrid)
671
672 ZCGUI_BUILDER_START(Engraving)
673 ZCGUI_ACCEPT_PROP(data, setSlot, int32_t)
674 ZCGUI_BUILDER_END()
675 ZCGUI_BUILDER_FUNCTION(Engraving, Engraving, makeEngraving)
676
677 #endif
678
679 } // namespace GUI::builder
680
681 namespace GUI::Props
682 {
683
684 // We want these in scope for setting sizes.
685 using ::GUI::operator ""_em;
686 using ::GUI::operator ""_px;
687
688 } // namespace GUI::Props
689
690 //{ Builder Shortcuts
691 #define _d DummyWidget()
692
693 //
694
695 #define INITD_ROW(ind, d_mem, lab_mem) \
696 Row(vPadding = 0_px, \
697 TextField(maxLength = 64, \
698 text = std::string(lab_mem[ind]), \
699 type = GUI::TextField::type::TEXT, \
700 width = 8_em, \
701 rightPadding = 0_px, \
702 onValChangedFunc = [&](GUI::TextField::type,std::string_view str,int32_t) \
703 { \
704 for(size_t q = 0; q < 65; ++q) \
705 { \
706 if(q < str.size()) \
707 lab_mem[ind][q] = str.at(q); \
708 else \
709 lab_mem[ind][q] = 0; \
710 } \
711 } \
712 ), \
713 TextField( \
714 type = GUI::TextField::type::SWAP_ZSINT, \
715 val = d_mem[ind], \
716 width = 6.5_em+16_px, \
717 leftPadding = 0_px, \
718 onValChangedFunc = [&](GUI::TextField::type,std::string_view,int32_t val) \
719 { \
720 d_mem[ind] = val; \
721 } \
722 ) \
723 )
724
725 #define INITD_ROW2(ind, d_mem) \
726 Row(vPadding = 0_px, \
727 Label( text = "InitD["+std::to_string(ind)+"]:", \
728 textAlign = 2, \
729 rightPadding = 0_px \
730 ), \
731 TextField( \
732 type = GUI::TextField::type::SWAP_ZSINT, \
733 val = d_mem[ind], \
734 width = 6.5_em+16_px, \
735 leftPadding = 0_px, \
736 onValChangedFunc = [&](GUI::TextField::type,std::string_view,int32_t val) \
737 { \
738 d_mem[ind] = val; \
739 } \
740 ) \
741 )
742
743 #define SCRIPT_LIST(name, list, mem) \
744 Label(minwidth = 6.5_em, text = name, textAlign = 2), \
745 DropDownList( \
746 fitParent = true, \
747 data = list, \
748 selectedValue = mem, \
749 onSelectFunc = [&](int32_t val) \
750 { \
751 mem = val; \
752 } \
753 )
754
755 #define SCRIPT_LIST_PROC(name, list, mem, proc) \
756 Label(minwidth = 6.5_em, text = name, textAlign = 2), \
757 DropDownList( \
758 fitParent = true, \
759 data = list, \
760 selectedValue = mem, \
761 onSelectFunc = [&](int32_t val) \
762 { \
763 mem = val; \
764 proc(); \
765 } \
766 )
767
768 //
769
770 #define DINFOBTN() \
771 Button(forceFitH = true, text = "?", \
772 disabled = true)
773 #define INFOBTN(inf) \
774 Button(forceFitH = true, text = "?", \
775 onClick = message::REFR_INFO, \
776 onPressFunc = [=]() \
777 { \
778 displayinfo("Info",inf); \
779 })
780 #define INFOBTN_T(title, inf) \
781 Button(forceFitH = true, text = "?", \
782 onClick = message::REFR_INFO, \
783 onPressFunc = [=]() \
784 { \
785 displayinfo(title,inf); \
786 })
787 #define INFOBTN_F(inf,...) \
788 Button(forceFitH = true, text = "?", \
789 onClick = message::REFR_INFO, \
790 onPressFunc = [=]() \
791 { \
792 displayinfo("Info",fmt::format(inf,__VA_ARGS__)); \
793 })
794 #define INFOBTN_EX(inf, ...) \
795 Button(text = "?", \
796 onClick = message::REFR_INFO, \
797 __VA_ARGS__, \
798 onPressFunc = [=]() \
799 { \
800 displayinfo("Info",inf); \
801 })
802 #define INFOBTN_REF(getter) \
803 Button(forceFitH = true, text = "?", \
804 onClick = message::REFR_INFO, \
805 onPressFunc = [&]() \
806 { \
807 displayinfo("Info",getter); \
808 })
809
810 //
811
812 #define _INTBTN_PANEL_HELPER(var) \
813 Columns<4>( \
814 Checkbox( \
815 text = "A", hAlign = 0.0, \
816 checked = var&0x1, \
817 onToggleFunc = [&](bool state) \
818 { \
819 SETFLAG(var,0x1,state); \
820 }), \
821 Checkbox( \
822 text = "B", hAlign = 0.0, \
823 checked = var&0x2, \
824 onToggleFunc = [&](bool state) \
825 { \
826 SETFLAG(var,0x2,state); \
827 }), \
828 Checkbox( \
829 text = "L", hAlign = 0.0, \
830 checked = var&0x4, \
831 onToggleFunc = [&](bool state) \
832 { \
833 SETFLAG(var,0x4,state); \
834 }), \
835 Checkbox( \
836 text = "R", hAlign = 0.0, \
837 checked = var&0x8, \
838 onToggleFunc = [&](bool state) \
839 { \
840 SETFLAG(var,0x8,state); \
841 }), \
842 Checkbox( \
843 text = "Ex1", hAlign = 0.0, \
844 checked = var&0x10, \
845 onToggleFunc = [&](bool state) \
846 { \
847 SETFLAG(var,0x10,state); \
848 }), \
849 Checkbox( \
850 text = "Ex2", hAlign = 0.0, \
851 checked = var&0x20, \
852 onToggleFunc = [&](bool state) \
853 { \
854 SETFLAG(var,0x20,state); \
855 }), \
856 Checkbox( \
857 text = "Ex3", hAlign = 0.0, \
858 checked = var&0x40, \
859 onToggleFunc = [&](bool state) \
860 { \
861 SETFLAG(var,0x40,state); \
862 }), \
863 Checkbox( \
864 text = "Ex4", hAlign = 0.0, \
865 checked = var&0x80, \
866 onToggleFunc = [&](bool state) \
867 { \
868 SETFLAG(var,0x80,state); \
869 }) \
870 )
871
872 #define INTBTN_PANEL_EX(var,ltxt,inftxt,...) \
873 Column(padding = 0_px, __VA_ARGS__, \
874 Row(padding = 0_px, \
875 Label(text = ltxt), \
876 INFOBTN(inftxt) \
877 ), \
878 _INTBTN_PANEL_HELPER(var) \
879 )
880 #define INTBTN_PANEL(var,ltxt,inftxt) \
881 Column(padding = 0_px, \
882 Row(padding = 0_px, \
883 Label(text = ltxt), \
884 INFOBTN(inftxt) \
885 ), \
886 _INTBTN_PANEL_HELPER(var) \
887 )
888
889 #define INTBTN_FRAME_EX(var,ltxt,inftxt,...) \
890 Frame(title = ltxt, __VA_ARGS__, \
891 info = inftxt, \
892 _INTBTN_PANEL_HELPER(var) \
893 )
894 #define INTBTN_FRAME(var,ltxt,inftxt) \
895 Frame(title = ltxt, \
896 info = inftxt, \
897 _INTBTN_PANEL_HELPER(var) \
898 )
899
900 //
901
902 #define _INTBTN_PANEL_HELPER2(var,ltxt) \
903 Label(text = ltxt), \
904 Columns<4>( \
905 Checkbox( \
906 text = "A", hAlign = 0.0, \
907 checked = var&0x1, \
908 onToggleFunc = [&](bool state) \
909 { \
910 SETFLAG(var,0x1,state); \
911 }), \
912 Checkbox( \
913 text = "B", hAlign = 0.0, \
914 checked = var&0x2, \
915 onToggleFunc = [&](bool state) \
916 { \
917 SETFLAG(var,0x2,state); \
918 }), \
919 Checkbox( \
920 text = "L", hAlign = 0.0, \
921 checked = var&0x4, \
922 onToggleFunc = [&](bool state) \
923 { \
924 SETFLAG(var,0x4,state); \
925 }), \
926 Checkbox( \
927 text = "R", hAlign = 0.0, \
928 checked = var&0x8, \
929 onToggleFunc = [&](bool state) \
930 { \
931 SETFLAG(var,0x8,state); \
932 }), \
933 Checkbox( \
934 text = "Ex1", hAlign = 0.0, \
935 checked = var&0x10, \
936 onToggleFunc = [&](bool state) \
937 { \
938 SETFLAG(var,0x10,state); \
939 }), \
940 Checkbox( \
941 text = "Ex2", hAlign = 0.0, \
942 checked = var&0x20, \
943 onToggleFunc = [&](bool state) \
944 { \
945 SETFLAG(var,0x20,state); \
946 }), \
947 Checkbox( \
948 text = "Ex3", hAlign = 0.0, \
949 checked = var&0x40, \
950 onToggleFunc = [&](bool state) \
951 { \
952 SETFLAG(var,0x40,state); \
953 }), \
954 Checkbox( \
955 text = "Ex4", hAlign = 0.0, \
956 checked = var&0x80, \
957 onToggleFunc = [&](bool state) \
958 { \
959 SETFLAG(var,0x80,state); \
960 }) \
961 ) \
962 )
963 #define INTBTN_PANEL2_EX(var,ltxt,...) \
964 Column(padding = 0_px, __VA_ARGS__, _INTBTN_PANEL_HELPER2(var,ltxt)
965 #define INTBTN_PANEL2(var,ltxt) \
966 Column(padding = 0_px, _INTBTN_PANEL_HELPER2(var,ltxt)
967
968 //
969
970 #define _EX_RBOX hAlign = 1.0,boxPlacement = GUI::Checkbox::boxPlacement::RIGHT
971
972 //}
973
974 #endif
975